import { axios } from '@/utils/request'
import api from '@/api/index'

const http = {
  /**
   * get请求
   */
  get (me, option) {
    let params = option.data ? option.data : {}
    let config = { params, ...option }
    return axios.get(option.url, config).then(res => {
      if (res.code === 100) {
        option.success && option.success(me, res.data, res.extra)
      } else {
        option.fail && option.fail(me, res.data)
      }
    }).catch(function (err) {
      option.error && option.error(me, err)
    })
  },

  /**
   * 分页请求
   */
  page (me, option) {
    let params = option.data ? option.data : {}
    let config = { params, ...option }
    return axios.get(option.url, config).then(res => {
      if (res.code === 100) {
        option.success && option.success(me, res.data, res.extra)
      } else {
        option.fail && option.fail(me, res.data)
      }
    }).catch(function (err) {
      option.error && option.error(me, err)
    })
  },

  /**
   * post请求
   */
  post (me, option) {
    return axios.post(option.url, params).then(res => {
      if (res.code === 100) {
        option.success && option.success(me, res.data, res.extra)
        if (res.message) {
          me.$message.destroy()
          me.$message.success(res.message)
        }
        // me.$forceUpdate();
      } else {
        option.fail && option.fail(me, res.data)
      }
    }).catch(function (err) {
      if (err) {

      }
      option.error && option.error(me, err.response)
    })
  },
  /**
   * 添加或者更新
   */
  saveOrUpdate (me, option) {
    let api = option.api
    let url = api
    if (typeof api == 'object') {
      url = option.data.id ? api['update'] : api['add']
    }
    let data = option.data ? option.data : {}
    return axios.post(url, data).then(res => {
      if (res.code === 100) {
        me.$bus.emit('reloadTable')
        me.$bus.emit('closeModal')
        option.success && option.success(me, res.data, res.extra)
        if (res.message != '') {
          me.$message.destroy()
          me.$message.success(res.message)
        }
        // me.$forceUpdate();
      } else {
        option.fail && option.fail(me, res.data)
      }
    }).catch(function (err) {
      if (err) {

      }
      option.error && option.error(me, err.response)
    })
  },
  /**
   * 带询问删除
   */
  del (me, option) {
    me.$confirm({
      title: '确认删除',
      content: '您确认要删除所选数据吗?',
      onOk: () => {
        let params = option.data ? option.data : {}
        return axios.post(option.url, params).then(res => {
          if (res.code === 100) {
            me.$bus.emit('reloadTable', name)
            option.success && option.success(me, res.data, res.extra)
            if (res.message) {
              me.$message.destroy()
              me.$message.success(res.message)
            }
          } else {
            option.fail && option.fail(me, res.data)
          }
        }).catch(function (err) {
          if (err) {
            if (err.response.status == 401) {
              //通知登录框弹出
              me.$store.commit('openLoginModel', true)
            }
          }
          option.error && option.error(me, err.response)
        })
      }
    })
  },
  /**
   * 带询问操作
   */
  confirm (me, option) {
    let content = option.content ? option.content : '确定执行该操作吗?'
    me.$Modal.confirm({
      title: '确认操作',
      content: content,
      onOk: () => {
        let params = option.data ? option.data : {}
        return axios.post(option.url, params).then(res => {
          if (res.code === 100) {
            option.success && option.success(me, res.data, res.extra)
            if (res.message) {
              me.$message.destroy()
              me.$message.success(res.message)
            }
          } else {
            option.fail && option.fail(me, res.data)
          }
        }).catch(function (err) {
          if (err) {
            if (err.response.status == 401) {
              //通知登录框弹出
              me.$store.commit('openLoginModel', true)
            }
          }
          option.error && option.error(me, err.response)
        })
      }
    })
  }
}
export { http, api }
